package com.zoweunion.mechanic.util;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Base64;

public class Base64Util {

	public static void main(String[] args) {
		String str = imgToBase64("D:/20170515144439497.jpg");
		System.out.println(str);
//		String str = "";
		
		boolean flag = base64ToImg(str,"D:/test.jpg");
		if(flag){
			System.out.println("ok");
		}else{
			System.out.println("ng");
		}
	}

	/**
	 * 图片转化成base64字符串
	 */
	public static String imgToBase64(String imgPath) {
		byte[] imageContents = readFile(Paths.get(imgPath));
		if (imageContents != null) {
			return Base64.getEncoder().encodeToString(imageContents);
		}
		return null;
	}

	/**
	 * 将base64转换为图片并存储到指定位置
	 */
	public static boolean base64ToImg(String base64Str, String filePath) {
		if (base64Str == null && filePath == null) {
			return false;
		} else {
			byte[] imageContents = base64Decoding(base64Str);
			if (imageContents != null)
				try {
					Files.write(Paths.get(filePath), imageContents, StandardOpenOption.CREATE);
					return true;
				} catch (IOException e) {
					System.out.println("写入文件出错");
					return false;
				}
		}
		return false;
	}

	/**
	 * 从图片文件中读取内容。
	 * 
	 * @param path
	 *            图片文件的路径。
	 * @return 二进制图片内容的byte数组。
	 *
	 */
	private static byte[] readFile(Path path) {
		byte[] imageContents = null;
		try {
			imageContents = Files.readAllBytes(path);
		} catch (IOException e) {
			System.out.println("读取文件出错");
		}
		return imageContents;
	}

	/**
	 * 解码图片文件。
	 * 
	 * @param imageContents
	 *            待解码的图片文件的字符串格式。
	 * @return 解码后图片文件的二进制内容。
	 */
	private static byte[] base64Decoding(String imageContents) {
		if (imageContents != null) {
			return Base64.getDecoder().decode(imageContents);
		} else {
			return null;
		}
	}

}
